package cn.ncupyh.soft;

/**
 * @version 1.8
 * @Author Djx_hmbb
 * @Date 2023/8/3 23:32
 * @注释:数组中重复的数字
 * @题目:在一个长度为 n 的数组 nums 里的所有数字都在 0～n-1 的范围内。
 * 数组中某些数字是重复的，但不知道有几个数字重复了，也不知道每个数字重复了几次。
 * 请找出数组中任意一个重复的数字。
 */
public class Day01 {
    public static void main(String[] args) {
        int[] nums = {2, 3, 1, 0, 2, 5, 3};
        int number = findRepeatNumber2(nums);
        System.out.println(number);
    }

    //数组中重复的数字
    public static int findRepeatNumber1(int[] nums) {
        //找出出现多次的数字下标
        for(int i = 0;i<nums.length;i++){
            int tmp = nums[i];
            for(int j = i+1;j<nums.length;j++){
                if(tmp == nums[j]){
                    return tmp;
                }
            }
        }
        //没有则返回空
        return -1;
    }

    //思想:将数字转化为新数组的下标,遇到第一次的数字,下标从0开始增加,如果再遇到下标不为0的,则重复出现
        public static int findRepeatNumber2(int[] nums) {
            int[] cnt = new int[nums.length];
            for(int num : nums){
                if(cnt[num] == 0)
                    cnt[num]++;
                else return num;
            }
            return -1;
        }

}
